/**
 ******************************************************************************
 * @file           : bsp_rtc_config.h
 * @brief          : RTC Configuration File (STM32F4xx)
 ******************************************************************************
 * @attention
 *
 * RTC配置文件
 * STM32F4xx使用日历型RTC，与F1xx架构完全不同
 *
 ******************************************************************************
 */

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __BSP_RTC_CONFIG_H
#define __BSP_RTC_CONFIG_H

#ifdef __cplusplus
extern "C" {
#endif

/* Includes ------------------------------------------------------------------*/
#include "stm32f4xx.h"

/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/

/* ============================================================================ */
/*                       日志系统配置（改这里的数字）                             */
/* ============================================================================ */
/* 日志后端选择：1=EasyLogger, 2=printf, 0=关闭 */
#define RTC_USE_LOG     1

/* 根据配置自动定义日志宏 */
#if (RTC_USE_LOG == 1)
    /* 使用EasyLogger */
    #ifndef LOG_TAG
        #define LOG_TAG    "RTC"
    #endif
    #include "elog.h"
    
#elif (RTC_USE_LOG == 2)
    /* 使用printf */
    #include <stdio.h>
    #define log_i(fmt, ...)     printf(fmt "\r\n", ##__VA_ARGS__)
    #define log_w(fmt, ...)     printf("[WARN] " fmt "\r\n", ##__VA_ARGS__)
    #define log_e(fmt, ...)     printf("[ERROR] " fmt "\r\n", ##__VA_ARGS__)
    #define log_d(fmt, ...)     printf("[DEBUG] " fmt "\r\n", ##__VA_ARGS__)
    
#else
    /* 关闭日志 */
    #define log_i(fmt, ...)
    #define log_w(fmt, ...)
    #define log_e(fmt, ...)
    #define log_d(fmt, ...)
#endif

/* ============================================================================ */
/*                      RTC时钟源配置（改这里选择时钟源）                         */
/* ============================================================================ */
/**
 * @brief RTC时钟源选择
 * 
 * 0 = LSI (内部低速时钟，32kHz，精度低)
 * 1 = LSE (外部低速晶振，32.768kHz，精度高) 【推荐】
 * 
 * LSI特点：
 *   - 内部RC振荡器
 *   - 约32kHz，精度低（±5%）
 *   - 无需外部元件
 *   - 适合对时间精度要求不高的应用
 * 
 * LSE特点：
 *   - 外部32.768kHz晶振
 *   - 精度高（±20ppm）
 *   - 需要外部晶振和电容
 *   - 适合精确计时应用【推荐】
 */
#define RTC_USE_LSE             1       /*!< 1=使用LSE, 0=使用LSI */

/**
 * @brief RTC时钟分频配置
 * 
 * STM32F4 RTC时钟树：
 *   LSE(32.768kHz) → 异步分频 → 同步分频 → 1Hz
 * 
 * 对于LSE 32.768kHz：
 *   异步分频 = 128
 *   同步分频 = 256
 *   RTC时钟 = 32768 / (128 × 256) = 1Hz
 * 
 * 对于LSI 32kHz：
 *   异步分频 = 125
 *   同步分频 = 256
 *   RTC时钟 = 32000 / (125 × 256) = 1Hz
 */
#if (RTC_USE_LSE == 1)
    #define RTC_ASYNC_PREDIV        127     /* 异步分频-1 (128-1) */
    #define RTC_SYNC_PREDIV         255     /* 同步分频-1 (256-1) */
#else
    #define RTC_ASYNC_PREDIV        124     /* 异步分频-1 (125-1) */
    #define RTC_SYNC_PREDIV         255     /* 同步分频-1 (256-1) */
#endif

/* Exported macro ------------------------------------------------------------*/
/* Exported variables --------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/

#ifdef __cplusplus
}
#endif

#endif /* __BSP_RTC_CONFIG_H */
